#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include"file.h"
#include"book.h"
Gnode *global_list = NULL;
Gnode* readbook(Gnode * p)//读取文件图书
{
       FILE* fd= fopen("book.txt","r");   
      if (!fd) {
        perror("文件打开失败");
       
    }
 
    //  2、操作文件 读取操作 
               
        int id;
        char name[50];
        char author[50];
        int numb;
        while(fscanf(fd, "%d %49s %49s %d",  &id,name,author,&numb) == 4)  // 3表示成功读取4个数据项
    {
        
        // 处理读取到的数据
          add_book(p,id, name,author,numb);
    }

    // 检查是否正常结束
    if (ferror(fd)) {
        perror("读取过程中发生错误");
    }

    //  3、关闭文件
    fclose(fd);
    return p;
}

Gnode* writebook(Gnode * l)//更新图书到文件
{
       FILE* fd= fopen("book.txt","w");   
      if (!fd) {
        perror("文件打开失败");
    }
    
     
               
     Node *p = l->first;
     while(p != NULL)			//	元素存在
		{
			fprintf(fd,"%d %s %s %d\n",p->bookid,p->bookname,p->writer,p->num);
			p = p->next;			//	下一个元素 
		}

    //  3、关闭文件
    fclose(fd);
    return l;
}
//printf("图书ID\t图书名称\t图书作者\t图书数量\n");
                //printf("%d\t%s\t%s\t%d\n",p->bookid,p->bookname,p->writer,p->num);
void add(Gnode *p)//增加图书操作
{
        int op;
        printf("1.增加图书\n");
        printf("2.返回\n");
        scanf("%d",&op);
        switch(op)
        {
        case 1:  
        { 
            int id;
            char name[50];
            char author[50];
            int numb;
            int op;
            printf("请输入图书信息:图书ID 图书名称 图书作者 图书数量\n ");
            scanf("%d %s %s %d",&id,name,author,&numb);
            add_book(p,id, name,author,numb);
            printf("图书增加成功\n");
            sleep(5);
            system("clear");
        
            break;
        }
        case 2:
        {
            return;
        }
        default: break;
 
        }
       

}

void find(Gnode*p)//查找图书
{
    char author[50];
    int op;
    printf("1.按图书ID寻找\n");
    printf("2.按图书名称寻找\n");
    printf("3.按图书作者寻找\n");
    printf("4.返回\n");
    scanf("%d",&op);
    switch(op)
    {
    case 1:  
    {
        int id;
        printf("请输入图书ID\n ");
        scanf("%d",&id);
        Node* l=find_bookid(p,id);
        if(l!=NULL)
        {	
        printf("图书ID\t图书名称\t图书作者\t图书数量\n ");
        printf("%d\t%s\t%s\t%d\n",l->bookid,l->bookname,l->writer,l->num);
       }
        sleep(5);
        system("clear");
        break;
    }
    case 2:
    {    char name[50];
        printf("请输入图书名称\n ");
        scanf("%s",name);
         Node* l=find_bookname(p,name);
           if(l!=NULL)
        {	
        printf("图书ID\t图书名称\t图书作者\t图书数量\n");
        printf("%d\t%s\t%s\t%d\n",l->bookid,l->bookname,l->writer,l->num);
        }
        sleep(5);
        system("clear");
        break;
    }
    case 3:
    {
        char author[50];
        printf("请输入作者名称\n");
        scanf("%s",author);
        find_bookwriter(p,author);
        sleep(5);
        system("clear");
        break;
    }
    case 4:
    { 
        system("clear");
        return;
    }
    default: break;
 
    }
}

void borrow(Gnode *p)//借书操作
{
    int op;
    printf("1.按图书ID寻找\n");
    printf("2.按图书名称寻找\n");
    printf("3.返回\n");
    scanf("%d",&op);
    switch(op)
    {
    case 1:  
    {
        int id;
        printf("请输入图书ID\n ");
        scanf("%d",&id);
        Node* l=find_bookid(p,id);
        if(l!=NULL)
        {
        printf("该图书数量为%d\n",l->num);
        int i;
        printf("输入借书数量\n");
        scanf("%d",&i);
        if(l->num>0)
        {
            l->num-=i;
            printf("借书成功\n ");
        }
        else
        {
             printf("借书失败\n ");
        }
        }
        sleep(5);
        system("clear");
        break;
    } 
    case 2:
    {
       char name[50];
        printf("请输入图书名称\n ");
        scanf("%s",name);
         Node* l=find_bookname(p,name);
         if(l!=NULL)
        {
        printf("该图书数量为%d\n",l->num);
        int i;
        printf("输入借书数量\n");
        scanf("%d",&i);
        if(l->num>0)
        {
            l->num-=i;
            printf("借书成功\n ");
        }
        else
        {
             printf("该图书没有库存\n ");
        }
        }
        sleep(5);
        system("clear");
        break;
    }
    case 3:
    {
        system("clear");
        return;
    }
    default:  break;
 
    }
}

void returnbook(Gnode *p)//还书操作
{
    int op;
    printf("1.按图书ID寻找\n");
    printf("2.按图书名称寻找\n");
    printf("3.返回\n");
    scanf("%d",&op);
    switch(op)
    {
    case 1: 
    {
        int id;
        printf("请输入图书ID\n ");
        scanf("%d",&id);
        Node* l=find_bookid(p,id);
        if(l!=NULL)
        {
        printf("该图书数量为%d\n",l->num);
        int i;
        printf("输入还书数量\n");
        scanf("%d",&i);
            l->num+=i;
            printf("还书成功\n ");
        }
        sleep(5);
        system("clear");
     
        break;
    } 
    case 2:
    {
        char name[50];
        printf("请输入图书名称\n ");
        scanf("%s",name);

         Node* l=find_bookname(p,name);
         if(l!=NULL)
        {
        printf("该图书数量为%d\n",l->num);
        int i;
        printf("输入还书数量\n");
        scanf("%d",&i);

            l->num-=i;
            printf("还书成功\n ");
        }
        sleep(5);
        system("clear");
        break;
    }
    case 3:
    {
        system("clear");
        return;
    }
    default:  break;
 
    }
}

void change(Gnode *p)//修改图书操作
{
    
    int op;
    printf("1.按图书ID寻找\n");
    printf("2.按图书名称寻找\n");
    printf("3.返回\n");
    scanf("%d",&op);
    switch(op)
    {
    case 1:
    { 
        int id;
        printf("请输入图书ID\n ");
        scanf("%d",&id);
        Node* l=find_bookid(p,id);
        if(l!=NULL)
        {
        int id1;
        char name1[50];
        char author1[50];
        int numb1;
        printf("请输入修改信息:图书ID 图书名称 图书作者 图书数量\n ");
        scanf("%d %s %s %d",&id1,name1,author1,&numb1);
        change_book(l,id1,name1,author1,numb1);
        }
        sleep(5);
        system("clear");
        break;
    } 
    case 2:
    {
        char name[50];
        printf("请输入图书名称\n ");
        scanf("%s",name);
        Node* l=find_bookname(p,name);
        if(l!=NULL)
        {
        int id1;
        char name1[50];
        char author1[50];
        int numb1;
        printf("请输入修改信息:图书ID 图书名称 图书作者 图书数量\n ");
        scanf("%d %s %s %d",&id1,name1,author1,&numb1);
        change_book(l,id1,name1,author1,numb1);
        }
        sleep(5);
        system("clear");
       
        break;
    }
    case 3:
    {
        system("clear");
        return;
    }
    default:  break;
 
    }
}

void delete(Gnode *p)//删除图书操作
{
    
    int op;
    printf("1.删除图书\n");
    printf("2.返回\n");
    scanf("%d",&op);
    switch(op)
    {
    case 1:
    {
       char name[50];
        printf("请输入图书名称\n ");
        scanf("%s",name);
        Node* l=find_bookname(p,name);
        if(l!=NULL)
        {
        delete_book(p,name);
        }
        sleep(5);
        system("clear");
        break;
    }
    case 2:
    {
        system("clear");
        return;
    }
    default:  break;
 
    }
}
void UI()
{
    int running=1;
    global_list=create_doublelist();
    readbook(global_list);
    while(running)
    {
    printf("----------图书管理系统---------\n");
    printf("\n");
    printf("相关操作\n");
    printf("1.增加图书\n");
    printf("2、查找图书\n");
    printf("3、借书\n");
    printf("4、还书\n");
    printf("5、修改图书信息\n");
    printf("6、删除图书\n");
    printf("7、退出系统\n");
    printf("\n");
    printf("请输入相关操作编号\n");
   
    int op;
    scanf("%d",&op);
    switch(op)
    {
        case 1:
            system("clear");   
            add(global_list);
            break;
        case 2:
            system("clear");    
            find(global_list);
            break;
        case 3:
            system("clear");   
            borrow(global_list);
            break;
        case 4:
            system("clear");    
            returnbook(global_list);
            break;
        case 5:  
            system("clear");  
            change(global_list);
            break;
        case 6:
            system("clear");  
            delete(global_list);
            break;
        case 7:  
            writebook(global_list);
            running=0;
            break;
        default:  break;
    }  
}
}
 



